/* 
变量作用域
变量根据作用域的不同分为两种：全局变量和局部变量。

函数内部可以使用全局变量。
函数外部不可以使用局部变量。
当函数执行完毕，本作用域内的局部变量会销毁
*/


/* 

闭包的概念
闭包（closure）指有权访问另一个函数作用域中变量的函数。（--JavaScript 高级程序设计）

简单理解就是，一个作用域可以访问另外一个函数内部的局部变量。
*/
function fn1() {
  var s = "hello"; // s 是一个被 fn1 创建的局部变量
  function fn2() { // fn2() 是内部函数，一个闭包
    console.log(s); // 使用了父函数中声明的变量
  }
  fn2();
}
fn1();

function fn() {
  let x = 10;

  function fun() {
    console.log(x);
  }

  return fun;
}
var f = fn();

f(); //10

//闭包的作用：延申变量的作用范围